// By mircemk, June 2026 #include #include #include #include Si5351 si5351; unsigned long frequency = 7000000; bool offsetActive = false; const unsigned long IF_OFFSET = 455000; // 455 kHz Offset за суперхетеродин const char* ssid = "Si5351_VFO_Final_Complete"; const char* password = "vfo12345678"; WebServer server(80); const char VFO_HTML[] PROGMEM = R"rawliteral(
40M HAM100Hz

07.000.000

OFFSET
MW
160
80
40
20
17
15
12
STEP: 100Hz
AM
USB
LSB
FM
M1
M2
M3
M4
)rawliteral"; void updateSi5351() { unsigned long outFreq = frequency; if (offsetActive) outFreq += IF_OFFSET; si5351.set_freq(outFreq * 100ULL, SI5351_CLK0); } void setup() { Serial.begin(115200); Wire.begin(21, 22); pinMode(32, INPUT); analogReadResolution(12); analogSetAttenuation(ADC_6db); si5351.init(SI5351_CRYSTAL_LOAD_8PF, 0, 0); updateSi5351(); WiFi.mode(WIFI_AP); WiFi.softAP(ssid, password); WiFi.setTxPower(WIFI_POWER_19_5dBm); // Максимално засилување на Wi-Fi server.on("/", []() { server.send(200, "text/html", VFO_HTML); }); server.on("/set", []() { if (server.hasArg("f")) { frequency = server.arg("f").toInt(); updateSi5351(); server.send(200, "text/plain", "OK"); } }); server.on("/setOffset", []() { if (server.hasArg("state")) { offsetActive = server.arg("state").toInt() == 1; updateSi5351(); server.send(200, "text/plain", "OK"); } }); server.on("/getS", []() { int val = analogRead(32); int percent = map(val, 0, 1200, 0, 100); if(percent > 100) percent = 100; server.send(200, "text/plain", String(percent)); }); server.begin(); } void loop() { server.handleClient(); }